QMT 与 PTrade · 券商量化交易终端梳理
境内 A 股程序化交易两大主流券商终端 —— 行为、结构、API 能力与选型对比
0. 一句话结论
QMT 是"本地客户端 + Python 库"的可编程交易终端,PTrade 是"跑在券商机房的托管式策略平台"。功能覆盖高度重合(A 股股票 / 两融 / ETF / 期货 / 期权、回测、实盘),真正的分野在运行位置:QMT 策略跑在你自己的电脑或云服务器上,自由度高、可用任意三方库,但依赖本地机器与网络;PTrade 策略托管在券商机房,无人值守、稳定低延迟,但内网隔离、只能用它内置的库,且编辑环境锁定 Windows。二者都是券商采购后免费(或按资金门槛)提供给客户的工具,没有绝对优劣,只看你的开发习惯与部署诉求。
1. 平台背景与定位
1.1 两个平台分别是什么
| 维度 | QMT 迅投 MiniQMT / 极速交易终端 | PTrade 恒生电子 |
|---|---|---|
| 开发厂商 | 上海迅投信息科技(ThinkTrader / 迅投) | 恒生电子(Hundsun) |
| 产品形态 | 桌面交易终端(QMT 客户端)+ xtquant Python 库 | 桌面客户端 + 策略运行引擎,策略托管在券商机房 |
| 获取方式 | 券商开户后申请开通,下载客户端 + xtquant 库 | 券商采购后向客户提供,按营业部 / 券商申请权限 |
| 策略运行位置 | 用户本地 PC / 自购云服务器 | 券商机房服务器(托管) |
| 编程方式 | 自由 Python 程序,主动调用 API + 注册回调 | 固定事件驱动框架(initialize / handle_data) |
| 典型券商 | 国金、国盛、华鑫、东方财富等多家 | 国金、国盛、湘财、东莞、长江、山西、申万宏源、国泰君安-海通等 |
xtquant 形式对外提供,因此常被简称"QMT"。
1.2 最本质的差异:运行位置
把两个平台放在同一张图上看,全部差异几乎都能从"策略代码到底跑在哪台机器上"这个原点推导出来:
- QMT:策略在你的机器上运行,通过本地通信连到 MiniQMT 客户端,再由客户端连券商柜台。好处是环境自由(可
pip任意库、可调试、可接自有数据源),代价是机器要常开、断网即中断。 - PTrade:策略代码提交到券商机房,由 PTrade 引擎按事件周期驱动执行。好处是稳定、低延迟、真正无人值守,代价是内网隔离(不能上网、不能
pip)、只能用内置库、编辑环境受限。
2. 行为视图(系统做什么)
先看"做什么":从整体用例,到策略全生命周期,再分别拆解两个平台一次下单的完整链路,最后收束到委托单的状态流转。
2.1 用例图 · 量化终端整体行为
两个平台对投资者呈现的用例几乎一致:编写调试、历史回测、仿真交易、实盘自动交易、行情获取、账户查询、风控、监控。区别在于用例的执行方与承载位置——QMT 的"策略编写 / 回测 / 实盘"发生在本地,PTrade 的则发生在券商机房内。
2.2 活动图 · 策略全生命周期
无论用 QMT 还是 PTrade,量化策略的落地路径是同一条:研究 → 回测 → 仿真 → 实盘 → 监控迭代。两个平台在"仿真"这一步的实现方式不同:QMT 常以模拟账号 / 模拟柜台完成,PTrade 有独立的仿真交易环境。回测与仿真未达标就实盘,是量化最常见的亏损来源。
2.3 时序图 · QMT 实盘下单链路
QMT 的链路是"策略进程 → xtquant → MiniQMT 客户端 → 券商柜台 → 交易所"。策略侧既可用同步接口 order_stock(返回订单号),也可用异步接口 order_stock_async(返回请求序号),成交与状态变化通过注册的回调类主推回策略。下面是最小可运行的连接 + 下单示例:
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
from xtquant import xtconstant
class MyCallback(XtQuantTraderCallback):
def on_stock_order(self, order):
print("委托回报:", order.stock_code, order.order_status)
def on_stock_trade(self, trade):
print("成交回报:", trade.stock_code, trade.traded_volume, trade.traded_price)
def on_order_error(self, err):
print("下单失败:", err.order_id, err.error_msg)
path = r"D:\迅投极速交易终端\userdata_mini" # MiniQMT 的 userdata_mini 目录
trader = XtQuantTrader(path, session_id=123456)
acc = StockAccount("1000000365") # 资金账号
trader.register_callback(MyCallback())
trader.start()
trader.connect() # 返回 0 表示连接成功
trader.subscribe(acc) # 订阅交易主推
# 同步报单:指定价买入 600000.SH 200 股
order_id = trader.order_stock(
acc, "600000.SH", xtconstant.STOCK_BUY, 200,
xtconstant.FIX_PRICE, 10.5, "my_strategy", "remark")
trader.run_forever() # 阻塞线程,持续接收主推
行情侧由 xtdata 模块独立提供,可取历史与实时行情、分笔、财务、板块数据:
from xtquant import xtdata
# 先下载再读取,避免实时拉取阻塞
xtdata.download_history_data("600000.SH", "1d", "20240101", "20241231")
bars = xtdata.get_market_data_ex([], ["600000.SH"], period="1d")
print(bars["600000.SH"].tail())
on_stock_order),免去轮询。
2.4 时序图 · PTrade 实盘下单链路
PTrade 没有"策略进程"这一显式概念,取而代之的是引擎按周期调用你写好的事件函数:initialize(启动一次)→ 每个交易日 before_trading_start → 盘中反复 handle_data / tick_data → after_trading_end。你在这些函数里调用 order 系列接口下单,成交回报通过 on_order_response / on_trade_response 回吐。
def initialize(context):
g.security = "600570.SS" # 恒生电子
set_universe(g.security) # 设置股票池,只能操作池内标的
def before_trading_start(context, data):
log.info("盘前准备:%s" % g.security)
def handle_data(context, data):
price = data[g.security]["close"] # 当前周期收盘价
if price > 20:
order_target_value(g.security, 10000) # 调整到目标市值买入
def after_trading_end(context, data):
log.info("盘后结算")
order("600570.SS", 1000) # 按数量买入(负数为卖出)
order_target("600570.SS", 0) # 调整到目标持仓数量(0 = 清仓)
order_value("600570.SS", 10000) # 按金额买入
order_target_value("600570.SS", 50000) # 调整到目标持仓市值
order_market("600570.SS", 1000, 0) # 市价委托(第三参为市价类型)
handle_data、tick_data 都是事件入口。
pickle 自动保存全局对象 g 中可序列化的变量(以 __ 开头的私有变量不保存)。
xtdata 亦提供分笔(tick)级数据。
2.5 状态机图 · 委托单状态流转
两个平台都维护一张委托单的生命周期状态。QMT 用 xtconstant.ORDER_* 常量表达,PTrade 用订单对象的 status 字段表达,语义基本一一对应。理解状态机是处理"撤单失败 / 部成待撤"等边界条件的前提。
ORDER_JUNK,PTrade 订单状态为"废单 / 已拒绝"。
3. 结构视图(由什么组成)
再看"由什么组成":从宏观部署,到各自的组件,到 Python 包与 API 分类,最后落到核心对象类图。
3.1 部署图 · 本地 vs 托管
部署差异决定了一切运维特性:QMT 的策略与数据都在本地节点,机器关机 / 断网即策略中断;PTrade 的策略与行情都在券商机房,处于内网,天然获得更稳定的网络与更低的柜台穿透延时。
3.2 组件图
两者都由"策略层 + 引擎层 + 券商侧"三段构成。QMT 的引擎层是本地独立的 MiniQMT 客户端;PTrade 的引擎层与券商侧同处机房,边界更模糊。
3.3 包图 · Python 包结构
QMT 以 Python 库形式暴露 API,导入路径清晰(xtquant.xtdata / xtquant.xttrader 等);PTrade 的 API 不是"导入的库",而是预置在策略运行环境里的全局函数,按功能分组,直接调用即可。
3.4 类图 · 核心对象
QMT 是"交易器 + 数据结构"范式:XtQuantTrader 提供方法,查询 / 下单返回 XtAsset / XtOrder / XtTrade / XtPosition 等对象,通过 XtQuantTraderCallback 接收推送。PTrade 是"上下文 + 全局函数"范式:所有函数在事件函数中直接调用,账户与持仓信息封装在 context(context.portfolio)里,跨事件的状态放在全局对象 g。
context.portfolio 提供现金、总资产、持仓字典等,是策略读取账户状态的入口。
g.security;可序列化的内容会被框架持久化。
4. 能力横向对比
4.1 运行模式与部署
| 维度 | QMT | PTrade |
|---|---|---|
| 策略运行位置 | 本地 PC / 自购云服务器 | 券商机房(托管) |
| 无人值守 | 需本机常开、网络稳定;可自购云主机 | 原生支持,客户端关闭后策略仍在机房运行 |
| 编辑环境 | 本机 Python 环境,任意 OS | Windows 客户端(macOS / Linux 需装虚拟机) |
| 网络隔离 | 可用公网、接任意数据源 | 内网隔离,通常不能上网 |
4.2 编程模型
| 维度 | QMT | PTrade |
|---|---|---|
| 范式 | 自由 Python 程序,主动调用 API + 注册回调 | 固定事件驱动框架,必须实现 initialize + handle_data |
| 事件入口 | 自行组织主循环;on_stock_order 等回调 | before_trading_start / handle_data / tick_data / after_trading_end / run_daily |
| 三方库 | 可自由 pip 安装 | 仅限内置库,不能 pip(部分券商可 HTTP 连外网) |
| Python 版本 | 库区分 3.6–3.12,按环境自动切换 | 多数券商内置 3.5,部分(如国金)已到 3.11 |
4.3 行情能力
| 维度 | QMT | PTrade |
|---|---|---|
| 粒度 | 历史 / 实时 K 线、分笔(tick)、财务、板块行业 | 日线 / 分钟 / tick,tick 最小 3 秒 |
| 盘口档位 | 全推 + 分笔,视券商权限 | 默认可取十档,部分券商内置 L2 逐笔(免费) |
| 取数方式 | xtdata:download_history_data / get_market_data_ex | get_history / get_price / get_snapshot / get_gear_price |
4.4 交易品种与业务
| 品种 / 业务 | QMT | PTrade |
|---|---|---|
| A 股股票 | 支持 | 支持(沪深主板 / 创业板 / 科创板) |
| 可转债(T+0) | 支持 | 支持 |
| ETF / LOF | 支持,含申赎 | 支持,含 ETF 申赎 / 套利 |
| 融资融券 | 支持(含专项、约券) | 支持(统一的 margin_* 接口) |
| 期货 | 支持(六键 / 四键 / 两键、套利、展期) | 支持(投机类型交易) |
| 期权 | 支持股票 / 期货期权、行权 | 回测支持面较窄,交易以券商权限为准 |
| 国债逆回购 | 支持 | 支持 |
| 港股通 | 支持(沪 / 深港通账号类型) | 部分支持 |
4.5 稳定性与适用人群
| 维度 | QMT | PTrade |
|---|---|---|
| 稳定性 / 速度 | 取决于本地机器与网络;自备云主机可改善 | 机房托管,稳定性与穿透速度通常更优 |
| 适合人群 | 有开发环境、需自由用三方库、要深度定制 / 调试者 | 想省去服务器运维、要做无人值守、以 A 股 / 可转债为主者 |
| 主要短板 | 机器常开、断网即停;需自行运维 | 内网封闭、库受限、编辑环境锁 Windows |
5. 申请门槛与开通流程
QMT 与 PTrade 都不是"下载即用"的公开软件,而是"券商采购 → 提供给开户客户"的通道型产品。能否开通取决于三件事:你开户的券商、你的账户资产、以及程序化交易报备是否合规。
5.1 开通条件构成
| 条件类型 | 说明 | 常见档位 |
|---|---|---|
| 资产门槛(核心变量) | 部分券商要求账户日均资产达标才授予权限 | 0(免费)/ 30 万 / 50 万 / 100 万,各券商差异极大 |
| 风险测评 | 须评估为积极型 | C4(积极型)及以上 |
| 交易 / 佣金约定 | 部分券商以"佣金率 / 交易量"作为交换条件 | 协商,常与资产门槛二选一 |
| 程序化交易报备 | 依法须事先向交易所报备账户、策略与速率 | 由券商协助办理(见 5.3) |
| 账户权限 | 普通账户即可;两融 / 期货 / 期权需先单独开通 | — |
5.2 两个平台的申请差异
| 维度 | QMT | PTrade |
|---|---|---|
| 开通主体 | 券商向迅投采购版本,再按客户开通 | 券商向恒生采购版本,再按客户开通 |
| 常见资产门槛 | 较灵活,部分券商可低门槛 / 免费试用 | 通常偏高,常见 50 万起,部分券商提供测试账号 |
| 开通耗时 | 一般 1–3 个工作日(视报备与审核) | 一般 1–3 个工作日 |
| 所需材料 | 身份证、银行卡、风险测评、程序化交易承诺 / 报备表 | 同上 |
| 测试环境 | 部分券商提供模拟账号 / 测试客户端 | 部分券商提供测试账号 / 测试客户端(如国金) |
5.3 程序化交易报备(2024 起的新增门槛)
自 2024 年《证券市场程序化交易管理规定(试行)》及沪深北交易所配套细则施行后,程序化交易投资者须事先报备,内容包括账户信息、交易策略类型、最高申报速率、单日最高申报笔数等;达到高频标准的还需额外报告并可能被加收费用。开通 QMT / PTrade 时券商一般会一并协助完成报备,未报备即程序化下单可能被限制交易或处罚。
6. 超级量化如何对接 QMT / PTrade
xtquant(XtData 行情 + XtTrader 交易);但它是本地 SDK,只能与本机登录的 MiniQMT 客户端通信,不是公网 REST / WebSocket 交易接口。PTrade 没有对外交易 API——它的 API 是运行在券商机房策略环境内的全局函数,外部进程无法调用。因此超级量化有两条对接路径:QMT 走"用户本机执行器调用 xtquant",PTrade 走"生成策略代码由用户导入运行"。
6.1 有没有交易 API:一张表说清
| 能力 | QMT | PTrade |
|---|---|---|
| 行情数据 API | 有,xtquant.xtdata(本地库) | 有,但仅在策略环境内(get_history 等) |
| 交易下单 API | 有,xtquant.xttrader(本地库) | 有,但仅在策略环境内(order 等) |
| 接口形态 | Python SDK,本机进程间通信 | 机房内策略函数,无对外网络接口 |
| 能否被第三方产品远程调用 | 不能远程;须部署在用户本机、与 MiniQMT 同机 | 不能;只能由 PTrade 引擎运行你的代码 |
| 可行的对接方式 | 自研执行器 import xtquant 下单 | 生成 PTrade 兼容策略代码,用户粘贴运行 |
一句话:两者都不是"注册个 API key 就能远程下单"的开放接口。这是券商场的普遍特点——账户与执行必须落在用户自己已开通权限的终端里。也正因如此,"用户自持账户自跑"的工具定位天然成立、合规风险最低。
6.2 QMT 对接方案(推荐,可做到自动化)
QMT 是唯一能让超级量化程序化对接执行的通道。做法是把超级量化的"执行端 / 网关"部署到用户本机(或用户自购云主机),它 import xtquant,与用户已登录的 MiniQMT 客户端通信完成下单与回报。信号可由云端下发,执行器轮询后转为本地报单。
from xtquant.xttrader import XtQuantTrader, XtQuantTraderCallback
from xtquant.xttype import StockAccount
from xtquant import xtconstant
import requests # 从超级量化云端拉取信号
class Gateway(XtQuantTraderCallback):
def on_stock_trade(self, trade):
report("trade", trade.stock_code, trade.traded_volume, trade.traded_price)
trader = XtQuantTrader(r"D:\...\userdata_mini", session_id=1001)
acc = StockAccount("1000000365")
trader.register_callback(Gateway())
trader.start(); trader.connect(); trader.subscribe(acc)
# 轮询超级量化云端信号 → 转成本地下单
for sig in requests.get("https://sq.example.com/api/signals",
params={"token": TOKEN}).json():
if sig["action"] == "buy":
trader.order_stock(acc, sig["code"], xtconstant.STOCK_BUY,
sig["volume"], xtconstant.FIX_PRICE, sig["price"],
"superquant", sig["id"])
trader.run_forever()
- 同机——超级量化执行端、
xtquant、MiniQMT 客户端必须在同一台机器上;xtquant走本地进程间通信,不能跨机 / 远程调用。 - 客户端在线——MiniQMT 须保持登录;
xtquant版本要与客户端匹配。 - 本机可联网——若策略 / 信号在超级量化云端,本机需能访问外网拉取信号(QMT 本地环境可联网,这点比 PTrade 宽松)。
- 所谓"本机"也可以是用户自购的 Windows 云主机,只要在那台机器上安装并登录 QMT 客户端即可,这也是无人值守的常见部署方式。
6.3 PTrade 对接方案(只能代码对接)
PTrade 没有任何外部可调用的交易接口,因此超级量化无法像 QMT 那样直接下单。可行做法是代码生成:把策略翻译成符合 PTrade 事件框架的 Python 文件,用户复制进 PTrade 客户端运行;若目标券商的 PTrade 支持外网 HTTP(少数),策略还可在运行时向超级量化拉取因子 / 信号数据,但下单动作仍只能发生在 PTrade 内部。
# 由超级量化自动生成,用户粘贴进 PTrade 客户端运行
def initialize(context):
g.codes = ["600570.SS", "600519.SS"]
set_universe(g.codes)
def handle_data(context, data):
for code in g.codes:
target = get_signal_from_superquant(code) # 仅支持外网的券商可用
if target is not None:
order_target_value(code, target)
6.4 推荐架构:一套云端 + 两类执行端
落地建议
- 加密市场:沿用现有
ccxt+ API key 直连模式,与本文两个平台无关。 - A 股自动化:优先 QMT 通道——部署本地执行器,用户自持账户与 MiniQMT,超级量化只下发策略 / 信号。
- A 股信号:PTrade 走代码生成(用户手动运行),或继续用邮件信号(当前合规方案的选择)。
- 合规红线:不代客下单、不碰资金、不做收益承诺;执行器仅把用户自己的信号搬到用户自己的账户。
6.5 超级量化是 Web 应用,如何落地
Web 应用可以做,但不能是"纯浏览器 + 纯云端 SaaS"。根本原因还是那条硬约束:xtquant 必须与 MiniQMT 客户端同机运行,而浏览器沙箱不能直接执行本地 Python。Web 只能当交互层,用户侧仍必须有一个能跑 xtquant 的本地进程。由此有三种形态:
- 本地 agent——网页经
localhostHTTP/WebSocket 与本地进程通信(最常用,即下文形态 A); - Native Messaging——浏览器扩展经
connectNative调用已注册的本地宿主程序(需装扩展 + 注册 manifest); - 自定义 URL Scheme——
myapp://唤起本地程序(交互弱、适合跳转不适合实时下单); - WebAssembly(如 Pyodide)——能在浏览器沙箱内跑 Python,但访问不到本机 QMT 通道、不能下单,只能做计算 / 回测。
xtquant",结论不变。
| 形态 | 做法 | 可行性 |
|---|---|---|
| A. Web 前端 + 本地执行器(agent) | 云端 Web 照常;用户另装一个轻量本地 agent(跑 xtquant),agent 反向连云端拉信号,或前端经 localhost 直连 agent | 可行,最常见("网页 + 本地助手") |
| B. Web 应用私有化部署到用户机器 | 把超级量化整站(含后端)部署到用户本机 / 自购 Windows 云主机,后端进程直接 import xtquant,浏览器只访问本机 Web | 可行,无人值守友好 |
| C. 纯云端 SaaS + 用户仅浏览器 | 用户侧没有任何进程 | 不可行,无法驱动 QMT |
要点:
- 本地进程是必需品——形态 A 是轻量 agent,形态 B 是整站后端,本质都是"用户侧要跑
xtquant"。 - 浏览器连本地:现代浏览器把
localhost视为安全上下文,HTTPS 页面可访问http://127.0.0.1;但更稳妥的是让本地 agent 反向连接云端(WebSocket 长连接),避免混合内容 / CORS / 防火墙问题。 - PTrade 仍不适用:Web 应用对 PTrade 只能"生成策略代码",没有实时通道。
- 安全与合规:agent 仅监听本机、需用户显式授权与 token 鉴权;账户凭据不落云端;只把用户自己的信号搬到用户自己的账户——继续守住"工具"边界。
6.6 能否"一个账户 / 一个 QMT 服务所有用户"
这是个常见误区。答案分两层:技术上做不到,合规上不允许。
技术层面:权限按账户绑定
QMT / PTrade 的交易权限是绑在具体证券账户上的:xtquant 只能连本机已登录该账户的 MiniQMT,PTrade 策略也只能操作该券商给这个账户开通的权限。一个账户的终端无法合法地替其他用户的账户下单。
合规层面:这属于无牌经营 + 账户归集
第三方平台用一个账户替所有用户交易,等于代客下单 + 资金 / 证券归集,同时触碰多条红线:无牌经营证券业务、账户出借、场外配资、变相资金池,均属违法。
合法的一对多模式确实存在,但主体是持牌方
| 模式 | 主体 | 账户 | 是否合法 |
|---|---|---|---|
| 券商把 PTrade / QMT 提供给全部客户 | 持牌券商 | 每个客户各自的账户 | 合法(账户分离,主体持牌) |
| 私募 / 资管用机构版系统连接多账户 | 持牌私募 / 资管 | 每只产品 / 账户独立 | 合法 |
| 软件商把交易系统卖给券商 / 私募 | 软件商(B2B) | 机构自己的账户 | 合法(卖工具,不碰业务) |
| 第三方用一个账户代所有用户交易 | 无牌第三方 | 账户混同 / 资金池 | 违法 |
7. 选型建议
| 你的情况 | 推荐 | 理由 |
|---|---|---|
| 已有云服务器 / 熟悉 Linux,需要第三方库(如 pandas、TA-Lib、自有数据) | QMT | 本地 / 云环境完全自由,可 pip、可外网取数 |
| 不想运维服务器,希望策略 7×24 无人值守 | PTrade | 托管在机房,客户端关闭后仍运行 |
| 策略以 A 股 / 可转债 / ETF 网格为主,逻辑标准化 | PTrade | 事件框架 + 内置量化工具足够,且更稳 |
| 要做期货多键开平、期权、复杂两融 / 约券 | QMT | xtconstant 对期货 / 期权 / 信用交易覆盖更细 |
| 需要极低延迟、贴近柜台的执行 | PTrade | 同处券商机房内网,穿透链路更短 |
| 两个都想要:研究 / 复杂策略用 QMT,稳定托管用 PTrade | 组合使用 | 二者不互斥,可按策略类型分配 |
8. 实战操作手册
8.1 QMT 从零到实盘
- 开户与开通:在支持 QMT 的券商开户,向客户经理申请开通 QMT / MiniQMT 权限,确认资金门槛与佣金。
- 安装客户端:下载券商的 QMT / 极速交易终端并安装,登录资金账号,记录安装目录下的
userdata_mini路径。 - 安装 xtquant:在本地 Python 环境放入 / 安装
xtquant库(须与客户端版本匹配),确认 Python 版本在支持范围内。 - 启动并连接:保持 MiniQMT 客户端登录运行;策略进程用
XtQuantTrader(path, session_id)→start()→connect()(返回 0)→subscribe(acc)。 - 行情与回测:用
xtdata.download_history_data下载历史数据,在本地做回测与因子研究。 - 仿真:用模拟账号连接,验证下单、撤单、查询、回调全链路。
- 实盘运行:切换到实盘账号,
run_forever()接收主推;建议部署在同网云主机并加进程守护与日志监控。
asset = trader.query_stock_asset(acc)
print("可用:", asset.cash, "总资产:", asset.total_asset)
for p in trader.query_stock_positions(acc):
print(p.stock_code, "持仓:", p.volume, "可用:", p.can_use_volume, "成本:", p.avg_price)
8.2 PTrade 从零到实盘
- 开户与开通:在支持 PTrade 的券商开户,向营业部申请 PTrade 权限(部分券商提供测试账号)。
- 下载安装:从券商官网下载对应券商的 PTrade 客户端(实盘版 / 测试版),安装并登录。
- 新建策略:在策略列表新建策略,选择业务类型(如股票),基于模板编写
initialize+handle_data。 - 新建回测:设定起止时间、初始资金、基准与频率(日线 / 分钟),保存后回测,查看收益曲线与评价指标。
- 仿真 / 测试:用测试版或模拟客户端验证策略逻辑与下单链路。
- 新建交易(托管):在交易界面选中策略、命名并启动,策略即在券商机房按周期运行,可实时查看总资产、持仓与交易日志。
- 持久化与监控:跨日状态用全局对象
g保存(框架自动 pickle),如需可send_email/send_qywx推送告警。
def handle_data(context, data):
pos = context.portfolio.positions # 持仓字典
cash = context.portfolio.cash # 可用资金
p = get_position("600570.SS") # 单只持仓
if p.amount > 0:
log.info("持仓 %s 股,成本 %.2f" % (p.amount, p.cost_basis))
9. 参数指令速查手册
9.1 QMT · xtconstant 关键枚举
交易市场 market
| 含义 | 常量 |
|---|---|
| 上交所 / 深交所 / 北交所 | SH_MARKET / SZ_MARKET / MARKET_ENUM_BEIJING |
| 沪港通 / 深港通 | MARKET_ENUM_SHANGHAI_HONGKONG_STOCK / MARKET_ENUM_SHENZHEN_HONGKONG_STOCK |
| 上期 / 大商 / 郑商 / 中金 / 能源 / 广期 | MARKET_ENUM_*_FUTURE |
| 上海 / 深圳期权 | MARKET_ENUM_SHANGHAI_STOCK_OPTION / MARKET_ENUM_SHENZHEN_STOCK_OPTION |
委托类型 order_type(摘)
| 含义 | 常量 |
|---|---|
| 股票买入 / 卖出 | STOCK_BUY / STOCK_SELL |
| 担保品买 / 卖、融资买入、融券卖出 | CREDIT_BUY / CREDIT_SELL / CREDIT_FIN_BUY / CREDIT_SLO_SELL |
| 期货开多 / 平昨多 / 平今多 / 开空 | FUTURE_OPEN_LONG / FUTURE_CLOSE_LONG_HISTORY / FUTURE_CLOSE_LONG_TODAY / FUTURE_OPEN_SHORT |
| 股票期权买开 / 卖平 / 卖开 / 买平 | STOCK_OPTION_BUY_OPEN / ..._SELL_CLOSE / ..._SELL_OPEN / ..._BUY_CLOSE |
| ETF 申购 / 赎回 | ETF_PURCHASE / ETF_REDEMPTION |
报价类型 price_type(摘)
| 含义 | 常量 |
|---|---|
| 最新价 / 指定价 | LATEST_PRICE / FIX_PRICE |
| 沪深股票市价 | MARKET_SH_CONVERT_5_CANCEL / MARKET_PEER_PRICE_FIRST / MARKET_MINE_PRICE_FIRST |
| 深交所即时成交剩余撤销 / 全额成交或撤销 | MARKET_SZ_INSTBUSI_RESTCANCEL / MARKET_SZ_FULL_OR_CANCEL |
委托状态 order_status
| 值 | 含义 | 常量 |
|---|---|---|
| 48 / 49 / 50 | 未报 / 待报 / 已报 | ORDER_UNREPORTED / ORDER_WAIT_REPORTING / ORDER_REPORTED |
| 51 / 52 | 已报待撤 / 部成待撤 | ORDER_REPORTED_CANCEL / ORDER_PARTSUCC_CANCEL |
| 53 / 54 / 55 / 56 | 部撤 / 已撤 / 部成 / 已成 | ORDER_PART_CANCEL / ORDER_CANCELED / ORDER_PART_SUCC / ORDER_SUCCEEDED |
| 57 | 废单 | ORDER_JUNK |
核心方法
| 用途 | 方法 |
|---|---|
| 连接 / 订阅 | connect() / subscribe(acc) |
| 下单(同步 / 异步) | order_stock(...) / order_stock_async(...) |
| 撤单 | cancel_order_stock(acc, order_id) / cancel_order_stock_async(...) |
| 查询 | query_stock_asset / query_stock_orders / query_stock_trades / query_stock_positions |
| 阻塞接收主推 | run_forever() |
9.2 PTrade · 关键函数与枚举
生命周期函数
| 函数 | 触发时机 |
|---|---|
initialize(context) | 策略启动时执行一次(必选) |
before_trading_start(context, data) | 盘前,每日一次 |
handle_data(context, data) | 盘中,按日 / 分钟周期反复执行(必选) |
tick_data(context, data) / run_interval(...) | tick 级(约 3 秒)盘中处理 |
after_trading_end(context, data) | 盘后,每日一次 |
on_order_response / on_trade_response | 委托 / 成交主推时触发 |
设置与定时函数
| 用途 | 函数 |
|---|---|
| 设置股票池 / 基准 | set_universe / set_benchmark |
| 回测费用与滑点 | set_commission / set_slippage / set_fixed_slippage |
| 回测成交限制 / 底仓 | set_volume_ratio / set_limit_mode / set_yesterday_position |
| 定时任务 | run_daily(func, time='09:30') / run_interval(...) |
| 消息推送 | send_email / send_qywx |
行情与交易函数
| 类别 | 函数 |
|---|---|
| 历史行情 | get_history / get_price |
| 实时快照 / 盘口 | get_snapshot / get_gear_price / get_tick_direction |
| 基础信息 | get_stock_info / get_index_stocks / get_industry_stocks / get_fundamentals |
| 股票下单 | order / order_target / order_value / order_target_value / order_market |
| 持仓 / 订单查询 | get_position / get_positions / get_orders / get_open_orders / get_trades |
| 撤单 | cancel_order / cancel_order_ex |
| 两融 | margin_trade / margincash_open / margincash_close / marginsec_open / marginsec_close |
| 期货 | buy_open / sell_close / sell_open / buy_close |
| 指标计算 | get_MACD / get_KDJ / get_RSI / get_CCI |
代码尾缀
| 市场 | 尾缀(简称 / 全称) |
|---|---|
| 上海证券 | .SS / .XSHG |
| 深圳证券 | .SZ / .XSHE |
| 指数 | .XBHS |
| 中金所期货 | .CCFX |
| 股票期权 | .XSHO / .XSZO |
order_stock(..., STOCK_BUY, vol, FIX_PRICE, price) ≈ PTrade order(secu, vol, limit_price=price);QMT 的"查询"对应 PTrade get_position / get_orders;QMT 回调 on_stock_trade 对应 PTrade on_trade_response。
附录:资料来源
- 迅投知识库 · XtQuant 文档(快速开始 / XtData / XtTrader / 数据字典):
dict.thinktrader.net - 迅投官网 ThinkTrader:
thinktrader.net - PTrade API 接口文档(含官方文档整理与示例):
ptradeapi.com - 各支持券商(国金、国盛、湘财、东莞、长江、山西、申万宏源、国泰君安-海通等)官方客户端与开通说明
说明:本文技术细节以厂商公开文档为准;资金门槛、佣金、支持品种与接口版本以各券商实际规定为准。